#include <iostream>
#include <pthread.h>

namespace MutexModule{
	class Mutex{
		public:
		Mutex(){
			pthread_mutex_init(&_mutex, nullptr);
		}
		~Mutex(){
			pthread_mutex_destroy(&_mutex);
		}
		void Lock(){
			pthread_mutex_lock(&_mutex);
		}
		void Unlock(){
			pthread_mutex_unlock(&_mutex);
		}

		private:
			pthread_mutex_t _mutex;
	};

	class MutexGuard{
		public:
		MutexGuard(Mutex& mutex):_mutex(mutex){
			_mutex.Lock();
		}
		~MutexGuard(){
			_mutex.Unlock();
		}

		private:
		Mutex& _mutex;
	};
}